/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rules;

import types.ColoringInfo;
import types.ISudokuMatrix;
 
/**
 *
 * @author ali
 */
public interface Rule extends Comparable<Rule>
{

    public void setQuadrat(int x,int y)throws Exception;
    public  int getQuadrat();
    public String getName();
    public boolean isApplicable(int x, int y, ISudokuMatrix matrix);
    public ColoringInfo getCheckedUnits(int x, int y, ISudokuMatrix matrix);

     /**
     *  Liefert das Kosten der Anwendung des Regels auf einem leeren Feld
     *  Kosten für Betrachtung des Quadrat selbst = 1
     *  Kosten für Betrachtung des direkt-benachbarten Quadrat = 2
     *  Kosten für Betrachtung des indirekt-benachbarten  (Nachbar des Nachbars)Quadrat = 3
     *  wenn mehrere artefakte gleichzeitig betrachtet werden müssen:
      * z.B. ein Quadrat und eine spalte dann
     *  kosten = (kosten (Quadrat) + kosten (Spalte))*Anzahl der Artefakte
      * +++++++++++++
     *  + 1 + 2 + 3 +
     *  +++++++++++++
     *  + 4 + 5 + 6 +
     *  +++++++++++++
     *  + 7 + 8 + 9 +
     *  +++++++++++++
      *
     **/
    public int getWeight(int QuadratNumber);
}
